import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

// 生产指挥中心大屏路由配置
const screenRouter = {
  path: '/screen',
  name: 'screen',
  redirect: '/screen/indexNew',
  // 公用组件
  component: () => import('@/views/screen/App'),
  children: [
 
  {
    path: 'indexNew',
    name: 'indexNew',
    component: () => import('@/views/screen/IndexNew'),
    meta: {
      title: '生产指挥中心',
	  keepAlive: false
    }
  }],
  beforeEnter (to, from, next) {
	  next()
  }
}

// 总路由
const router = new Router({
  mode: 'hash',
  routes: [
    {
      path: '/',
      redirect: '/screen/IndexNew'
    },
    screenRouter,
    // 容错 强制跳转
    // 权限不足跳转页面
    {
      path: '/401',
      name: '401',
      component: () => import('@/views/other/401'),
      meta: {
        title: '401'
      }
    },
    {
      path: '/404',
      name: '404',
      component: () => import('@/views/other/404'),
      meta: {
        title: '404'
      }
    },
    {
      path: '*',
      redirect: '/404'
    }
  ],
})

/**
 * 注册一个全局前置守卫
 * https://router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%85%A8%E5%B1%80%E5%AE%88%E5%8D%AB
 * to: Route: 即将要进入的目标 路由对象
 * from: Route: 当前导航正要离开的路由
 * next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。
 *  next(): 进行管道中的下一个钩子。如果全部钩子执行完了，则导航的状态就是 confirmed (确认的)。
 *  next(false): 中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮)，那么 URL 地址会重置到 from 路由对应的地址。
 *  next('/') 或者 next({ path: '/' }): 跳转到一个不同的地址。当前的导航被中断，然后进行一个新的导航。你可以向 next 传递任意位置对象，且允许设置诸如 replace: true、name: 'home' 之类的选项以及任何用在 router-link 的 to prop 或 router.push 中的选项。
 *  next(error): (2.4.0+) 如果传入 next 的参数是一个 Error 实例，则导航会被终止且该错误会被传递给 router.onError() 注册过的回调。
 */
router.beforeEach((to, from, next) => {
  // 更改页面 title
  to.meta.title && (document.title = to.meta.title);
  /**
   * 登录认证
   * https://router.vuejs.org/zh/guide/advanced/meta.html#%E8%B7%AF%E7%94%B1%E5%85%83%E4%BF%A1%E6%81%AF
   */
  // 平台统一使用CAS认证，固不做拦截处理
  next() // 确保一定要调用 next()
})

export default router
